package cn.edu.sdjzu.xg.bysj.controller.basic;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import cn.edu.sdjzu.xg.bysj.domain.School;
import cn.edu.sdjzu.xg.bysj.service.SchoolService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.sql.SQLException;
import java.util.Collection;
/**
 * 说明：
 * 以“Dao”结尾的类，负责向Service提供数据（如数据库中信息的增，删，改，查）。当前阶段，数据库是“模拟”出来的。
 * 以“Service”结尾的类，负责向Controller（servlet）提供业务方案（如增，删，改，查）。请阅读原代码。
 * servlet充当Contoller来响应客户请求。由于它根据客户的不同请求去调度系统的资源（比如数据），故称Controller。
 * 开发Controller层时，一般只需要创建Service类的对象，然后向它发送相应的消息，以完成一定的业务。
 * 比如，SchoolService.getInstance.find(1)会得到id为1的学位对象(School类型)。SchoolService.getInstance.findAll()会得到所有学位对象(java.util.Collection<School></School>)。
 *
 */

/**
 * 将所有方法组织在一个Controller(Servlet)中
 */
@WebServlet("/school1.ctl")
public class SchoolController extends HttpServlet {
    /**
     * GET, http://localhost:8080/school.ctl?id=1, 查询id=1的学院
     * GET, http://localhost:8080/school.ctl, 查询所有的学院
     * 把一个或所有学位对象响应到前端
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //设置响应字符编码为UTF-8
        response.setContentType("text/html;charset=UTF-8");
        //读取参数id
        String id_str = request.getParameter("id");

        //创建JSON对象message，以便往前端响应信息
        JSONObject message = new JSONObject();
        try {
            //如果id = null, 表示响应所有学院对象，否则响应id指定的学院对象
            if (id_str == null) {
                responseSchools(response);
            } else {
                //根据id查找某个学院
                int id = Integer.parseInt(id_str);
                responseSchool(id, response);
            }
        }catch (SQLException e){
            response.getWriter().println("Exception occurs!"+e.getMessage());
            //响应message到前端
            response.getWriter().println(message);
        }catch(Exception e){
            response.getWriter().println("Exception occurs!"+e.getMessage());
            //响应message到前端
            response.getWriter().println(message);
        }
    }
    //响应一个学院对象
    private void responseSchool(int id, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        //根据id查找学院
        School school = SchoolService.getInstance().find(id);
        String school_json = JSON.toJSONString(school);
        //响应school_json到前端
        response.getWriter().println(school_json);
    }
    //响应所有学院对象
    private void responseSchools(HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        //获得所有学院
        Collection<School> schools = SchoolService.getInstance().findAll();
        String schools_json = JSON.toJSONString(schools, SerializerFeature.DisableCircularReferenceDetect);
        //响应schools_json到前端
        response.getWriter().println(schools_json);
    }
}
